详解数据仓库分层架构
01 什么是数据分层?
数据分层是一套行之有效的数据组织和管理方法,使得数据体系更有序。
02 数据分层的好处
(1)清晰数据结构
每一个数据分层都有它的作用域和职责,在使用表的时候能更方便的定位和理解。
(2)减少重复开发
规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
(3)统一数据口径
通过数据分层,提供统一的数据出口,统一对外输出的数据口径。
(4)复杂问题简单化
将一个复杂的任务分解成多个步骤完成,每一层解决特定的问题。
一种通用的数据分层设计
ODS:存放原始数据
DW:存放数仓中间层数据
APP:面向业务定制的应用数据
03 举例
以下是一个电商网站的数据体系设计,只关注用户访问日志这部分数据。
04 各层会用到的计算引擎和存储系统
05 分层实现
在确定建模思路和模型类型之后,下一步的工作是数据分层。数据分层可以使得数据构建体系更加清晰,便于数据使用者快速对数据进行定位;同时数据分层也可以简化数据加工处理流程,降低计算复杂度。
我们常用的数据仓库的数据分层通常分为集市层、中间层、基础数据层上下三层结构。由传统的多层结构减少到上下三层结构的目的是为了压缩整体数据处理流程的长度,同时扁平化的数据处理流程有助于数据质量控制和数据运维。
在上下三层的结构的右侧,我们增加了流式数据,将其添加成数据体系的一部分。这是因为当前的数据应用方向会越来越关注数据的时效性,越实时的数据价值度越高。
但是,由于流式数据集的采集、加工和管理的成本较高,一般都会按照需求驱动的方式建设;此外,考虑到成本因素,流式数据体系的结构更加扁平化,通常不会设计中间层。
下面来具体看下每一层的具体作用。
数据基础层
数据基础层主要完成的工作包括以下几点:
数据采集:把不同数据源的数据统一采集到一个平台上;
数据清洗,清洗不符合质量要求的数据,避免脏数据参与后续数据计算;
数据归类,建立数据目录,在基础层一般按照来源系统和业务域进行分类;
数据结构化,对于半结构化和非结构化的数据,进行结构化;
数据规范化,包括规范维度标识、统一计量单位等规范化操作。
数据中间层
数据集市层
数据集市层是上下三层架构的最上层,通常是由需求场景驱动建设的,并且各集市间垂直构造。在数据集市层,我们可以深度挖掘数据价值。值得注意的是,数据集市层需要能够快速试错。
数据架构
数据整合
数据服务化
数据服务化包括统计服务、分析服务和标签服务:
统计服务主要是偏传统的报表服务,利用大数据平台将数据加工后的结果放入关系型数据库中,供前端的报表系统或业务系统查询;
分析服务用来提供明细的事实数据,利用大数据平台的实时计算能力,允许操作人员自主灵活的进行各种维度的交叉组合查询。分析服务的能力类似于传统cube提供的内容,但是在大数据平台下不需要预先建好cube,更灵活、更节省成本;
标签服务,大数据的应用场景下,经常会对主体进行特征刻画,比如客户的消费能力、兴趣习惯、物理特征等等,这些数据通过打标签转换成KV的数据服务,用于前端应用查询。
06 数据分层的一些概念说明
数据来源层:日志或者关系型数据库,并通过Flume、Sqoop、Kettle等etl工具导入到HDFS,并映射到HIVE的数据仓库表中。
事实表是数据仓库结构中的中央表,它包含联系事实与维度表的数字度量值和键。事实数据表包含描述业务(例如产品销售)内特定事件的数据。
维度表是维度属性的集合。是分析问题的一个窗口。是人们观察数据的特定角度,是考虑问题时的一类属性,属性的集合构成一个维。数据库结构中的星型结构,该结构在位于结构中心的单个事实数据表中维护数据,其它维度数据存储在维度表中。每个维度表与事实数据表直接相关,且通常通过一个键联接到事实数据表中。星型架构是数据仓库比较流向的一种架构。
星型模式的基本思想就是保持立方体的多维功能,同时也增加了小规模数据存储的灵活性。
说明:
事实表就是你要关注的内容; 维度表就是你观察该事务的角度,是从哪个角度去观察这个内容的。
【补充】
数据缓存层:用于存放接口方提供的原始数据的数据库层,此层的表结构与源数据保持基本一致,数据存放时间根据数据量大小和项目情况而定,如果数据量较大,可以只存近期数据,将历史数据进行备份。此层的目的在于数据的中转和备份。
临时数据表层:存放临时测试数据表(Temp表),或者中间结果集的表。
07 大数据相关基础概念
数据源:业务系统、埋点、爬虫 PG:PostgreSQL,一种关系型数据库 Sqoop:是一个在结构化数据(mysql/oracle)和Hadoop(Hive)之间进行批量数据迁移的工具 Flume:是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;提供对数据进行简单处理,并写到各种数据接受方(HDFS\Hbase)的能力。 Kafka:是一个分布式、支持分区的、多副本的,基于zookeeper协调的分布式消息系统。 Flink:一个流式的数据流执行引擎。针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。 Kylin:是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力一直吃超大规模数据。能在亚秒内查询巨大的Hive表。 ES:elasticsSearch,是一个高扩展、开源的全文检索和分析引擎,可准实时地快速存储、搜索、分析海量的数据。 Hadoop:是一个分布式系统基础架构,可使用户在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。两大核心:HDFS\MapReduce HDFS:是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。 MapReduce:分布式计算框架。 Spark:是一个专为大规模数据处理而设计的快速通用的计算引擎。